package com.camera.common;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

/**
 * @Classname FileUtils
 * @Description TODO
 * @Date 2025/3/10 15:14
 * @Created by xxx
 */
public class FileUtils {
    /**
     * 保存图像文件到指定路径，支持格式转换
     *
     * @param sourcePath 源文件路径
     * @param savePath   目标保存路径（需包含文件名和扩展名）
     * @throws IOException              发生I/O错误时抛出
     * @throws IllegalArgumentException 参数不合法时抛出
     */
    public static void saveImage(Path sourcePath, Path savePath) throws IOException {

        // 参数校验
        validateInput(sourcePath, savePath);

        // 创建目标目录
        Path parentDir = savePath.getParent();
        if (parentDir != null) {
            Files.createDirectories(parentDir);
        }

        // 读取源图像
        BufferedImage image = ImageIO.read(sourcePath.toFile());
        if (image == null) {
            throw new IOException("无法读取图像文件: " + sourcePath);
        }
        String formatName = savePath.getFileName().toString().substring(savePath.getFileName().toString().lastIndexOf(".") + 1);
        // 保存图像文件
        ImageIO.write(image, formatName, savePath.toFile());

        // 可选：删除源文件（如果需要移动而非复制）
        //Files.delete(sourcePath);
    }

    private static void validateInput(Path sourcePath, Path savePath)
            throws IllegalArgumentException, IOException {

        // 检查源文件
        if (!Files.exists(sourcePath)) {
            throw new IllegalArgumentException("源文件不存在: " + sourcePath);
        }
        if (!Files.isRegularFile(sourcePath)) {
            throw new IllegalArgumentException("路径不是文件: " + sourcePath);
        }

        // 检查目标路径
        if (Files.isDirectory(savePath)) {
            throw new IllegalArgumentException("目标路径不能是目录: " + savePath);
        }
    }
}
